<?php
/**
 * 通用的的帮助类
 * 仲伟涛
 */
class Libs_DBHelper
{
    /**
     * 执行数据插入操作函数
     *
     * @param $db 数据库实例
     * @param $addItem 要添加的数组
     * @param $tableName 表名
     * @param $colArr 数据库字段列表，为了验证有效性 如果为空就是不验证
     * @param $debug 是否调试 1,输出sql
     */
    public static function insertItem($paramArr){
        if (is_array($paramArr)) {
            $options = array(
                'db'        => '',
                'tableName' => '', #表名
                'addItem'   => array(),#插入的数组
                'colArr'    => array(),#要传入的字段
                'debug'     => false,
                'replace'   => false,
            );
            $options = array_merge($options, $paramArr);
            extract($options);
        }
        if(empty($db) || empty($tableName) || empty($addItem))return false;
        //验证字段有效性
        if(!empty($colArr)){
            foreach ($addItem as $key => $val) {
                if(!in_array($key,$colArr)){
                    echo "update 字段无效:【{$key}】";exit;
                }
            }
        }
        $i_sql1 = $i_sql2 = $comma = "";
        foreach ($addItem as $key => $val) {
            $i_sql1 .= $comma."`{$key}`";
            $i_sql2 .= $comma."'{$val}'";
            $comma = ",";
        }
        $i_sql = $replace ? 'replace' : 'insert';
        $i_sql .= " into {$tableName} ({$i_sql1}) values ({$i_sql2})";
        if($debug)echo $i_sql;
        $db->query($i_sql);
        return $db->lastInsertId();
    }

     /**
     * 更新数据库记录
     *
     * @param $db 数据库实例
     * @param $tblname 表名
     * @param $item 更新数组
     * @param $colarr 字段数组 保证更新的安全进行
     * @param $where where条件，必须填写正确！
     * @return unknown
     */
    public static function  updateItem($paramArr){
        if (is_array($paramArr)) {
            $options = array(
                'db'        => '',
                'tableName' => '', #表名
                'where'     => '', #表名
                'addItem'   => array(),#插入的数组
                'colArr'    => array(),#要传入的字段
                'debug'     => false,
            );
            $options = array_merge($options, $paramArr);
            extract($options);
        }
        if(empty($db) || empty($tableName) || empty($where) || empty($addItem))return false;

        $sql = $s = "";
        foreach($addItem as $key=>$value){
            $sql .= $s." `$key` ='".$value."'";
            $s = ",";
        }
        if($sql=="")return false;

        $sql = "update {$tableName} set {$sql} {$where}";
        if($debug) echo $sql;
        $db->query($sql);
    }

     /**
     *  获得记录列表，并返回分页字符串和记录数量
     *
     * @param $db 数据库实例
     * @param $cols 搜索字段
     * @param $fromSql 字段后边的sql语句，请不要带limit
     * @param $pagesize 每页的记录数
     * @param $page 当前页面
     * @return 数组 key：pagestr allcnt list
     */
    public static function getList($paramArr){
        if (is_array($paramArr)) {
            $options = array(
                'db'        => '',
                'cols'      => '', #取得列
                'fromSql'   => '', #from部分的语句
                'whereSql'  => '', #where部分的语句
                'orderBySql'  => '', #where部分的语句
                'pagesize'  => 20,
                'urlTpl'    => '',
                'page'      => 1,#要传入的字段
                'onlyData'  => false, #只获得数据
                'debug'     => false,
            );
            $options = array_merge($options, $paramArr);
            extract($options);
        }
        if(empty($db))return false;
        $page     = max(1,(int)$page);
        $pagesize = min(100,(int)$pagesize);#一页取得的数据不能太大
        $cols = empty($cols) ? '*' : $cols;
        
        if(!$onlyData){
            //取得数量
            $sql = "select count('X') {$fromSql} {$whereSql} ";
            $allcnt = $db->getOne($sql);
        }

        $sql = "select {$cols} {$fromSql} {$whereSql} ";
        if($orderBySql) $sql .= $orderBySql;
        $sql.= " limit ".($page-1)*$pagesize.",".$pagesize;

        if($debug)echo $sql;
        $results= $db->getAll($sql);
        if($onlyData){
            return $results;
        }else{
            
            $pageCfg = array(
                'page' => $page,
                'rownum' => $pagesize,
                'target' => '_self',
                'total' => $allcnt,
                'url' => $urlTpl,
            );

            $pageObj = new Libs_Page($pageCfg);
            $pageTpl = '{PREV:上一页}{FIRST:[NUM]}{PREVHD:...}{BAR:[NUM]:9:4}{NEXTHD:<span>...</span>}{LAST:[NUM]}{NEXT:下一页}';
            $pageObj->setSmartShow(array('PREV'=>false,'NEXT'=>false));
            $pageObj->setStyle(array('PREVHD'=>'dot','NEXTHD'=>'dot','NEXT'=>'pnext','PREV'=>'pprev'));
            $pageBar = $pageObj->display($pageTpl);
            
            
            return array(
                'allcnt'      => $allcnt,
                'list'        => $results,
                'pageBar'     => "共有:{$allcnt} ".$pageBar
            );
        }
    }




}

?>
